const express = require('express');
const router = express.Router();
const pool = require('../db'); // 引入数据库连接池
const bcrypt = require('bcrypt'); // 用于密码加密

// 获取用户个人资料的API
router.get('/profile/:userId', async (req, res) => {
  const { userId } = req.params;

  if (!userId) {
    return res.status(400).json({ message: '用户ID不能为空' });
  }

  try {
    // 查询数据库中的用户信息
    const [rows] = await pool.execute(
      'SELECT username, email, role, createdAt, updatedAt FROM users WHERE id = ?',
      [userId]
    );

    if (rows.length === 0) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 返回用户个人资料
    const userProfile = rows[0];
    res.json(userProfile);
  } catch (error) {
    console.error('获取用户个人资料失败:', error);
    res.status(500).json({ message: '服务器内部错误' });
  }
});

// 更新个人资料
router.put('/profile/:userId', async (req, res) => {
  const { userId } = req.params;
  const { nickname, email } = req.body;

  if (!nickname || !email) {
    return res.status(400).json({ message: '昵称和邮箱不能为空' });
  }

  try {
    // 使用 pool.execute 更新数据库中的用户信息
    const [result] = await pool.execute(
      'UPDATE users SET username = ?, email = ? WHERE id = ?',
      [nickname, email, userId]
    );

    if (result.affectedRows === 0) {
      return res.status(404).json({ message: '用户不存在' });
    }

    res.json({ message: '个人资料更新成功' });
  } catch (error) {
    console.error('更新个人资料失败:', error);
    res.status(500).json({ message: '服务器内部错误' });
  }
});

// 修改密码
router.put('/security/:userId', async (req, res) => {
  const { userId } = req.params;
  const { oldPassword, newPassword } = req.body;

  if (!oldPassword || !newPassword) {
    return res.status(400).json({ message: '旧密码和新密码不能为空' });
  }

  try {
    // 查询用户当前密码
    const [rows] = await pool.execute(
      'SELECT password FROM users WHERE id = ?',
      [userId]
    );

    if (rows.length === 0) {
      return res.status(404).json({ message: '用户不存在' });
    }

    const user = rows[0];

    // 验证旧密码是否正确
    const isPasswordValid = await bcrypt.compare(oldPassword, user.password);
    if (!isPasswordValid) {
      return res.status(400).json({ message: '旧密码不正确' });
    }

    // 加密新密码
    const saltRounds = 10;
    const hashedPassword = await bcrypt.hash(newPassword, saltRounds);

    // 更新密码
    const [result] = await pool.execute(
      'UPDATE users SET password = ? WHERE id = ?',
      [hashedPassword, userId]
    );

    if (result.affectedRows === 0) {
      return res.status(500).json({ message: '密码更新失败' });
    }

    res.json({ message: '密码更新成功' });
  } catch (error) {
    console.error('修改密码失败:', error);
    res.status(500).json({ message: '服务器内部错误' });
  }
});

module.exports = router;